package cn.edu.wdu.gaojie.reflection.other;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author gaojie  gao4433@qq.com
 * @Description 用反射机制给类的属性赋值
 * @date 2021/11/29 13:59
 * @since 1.8
 */
public class AppRef {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {
        //加载某个类，得到【类对象】
        Class<?> H = Class.forName("cn.edu.wdu.gaojie.reflection.other.Human");
        //实例化，得到【类的对象】（类的势力），即 o
        Object o = H.newInstance();

        //反射属性（字段），得到的是【字段对象】
        Field name = H.getDeclaredField("name");
        //使字段对象具有被访问的能力
        name.setAccessible(true);
        //为字段赋值
        name.set(o,"Tom");

        //反射方法，得到方法对象，即：getName
        Method getName = H.getMethod("getName");
        Object result = getName.invoke(o);
        System.out.println(result);


    }
}
